﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>映射 对象 - 方法 &amp; 属性 | AutoHotkey v2</title>
<meta name="description" content="A 映射 对象 associates or maps one 设置 of values, called keys, to another 设置 of values." />
<meta name="ahk:equiv-v1" content="objects/Object.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>映射 对象</h1>

<p><strong>映射(映射)</strong> 对象将一组称为 <em>键</em> 的值关联或 <em>映射</em> 到另一组值. 键及其映射到的值称为键-值对. 映射可以包含任意数量的键值对, 但是每个键必须是唯一的.</p>
<p>键可以是任何<a href="../Concepts.htm#numbers">整数</a>, <a href="../Objects.htm">对象</a>引用或以 null 结尾的<a href="../Concepts.htm#strings">字符串</a>. 字符串键的比较是区分大小写的, 而对象是通过引用/地址进行比较的. <a href="../Concepts.htm#numbers">浮点数</a>键被自动转换成字符串.</p>
<p>映射的最简单用法是通过隐式的 <a href="#__Item">__Item</a> 属性检索或设置键-值对, 只需在映射对象后面的方括号中写入键. 例如:</p>
<pre>clrs := 映射()
clrs["Red"] := "ff0000"
clrs["Green"] := "00ff00"
clrs["Blue"] := "0000ff"
遍历 clr in 数组("Blue", "Green")
    信息框 clrs[clr]
</pre>
<p>下面的文档使用 <code>aMap</code> 作为任何映射对象的占位符. 注意, "map" 不应该用作变量名, 因为它是用来引用 映射 类本身.</p>
<p>映射 对象基于 <code>映射.Prototype</code>, 其又基于 <code>对象.Prototype</code>. 除了继承自 <a href="Object.htm">对象</a> 的方法和属性外, 映射对象还具有以下预定义的方法和属性:</p>

<p><strong>方法:</strong></p>
<ul>
  <li><a href="#Clear">清空</a></li>
  <li><a href="#Clone">复制</a></li>
  <li><a href="#Delete">删除</a></li>
	<li><a href="#Has">包含</a></li>
  <li><a href="#Set">设置</a></li>
  <li><a href="#__Enum">__Enum</a></li>
</ul>
<p><strong>属性:</strong></p>
<ul>
  <li><a href="#Count">长度</a></li>
	<li><a href="#Capacity">容量</a></li>
  <li><a href="#CaseSense">区分大小写</a></li>
  <li><a href="#__Item">__Item</a></li>
</ul>
<p><strong>函数:</strong></p>
<ul>
  <li><a href="#Map">映射</a></li>
</ul>

<h2 id="Methods">方法</h2>

<div class="methodShort" id="Clear"><h2>清空</h2>
<p>从映射中删除所有键-值对.</p>
<pre class="Syntax">aMap.<span class="func">清空</span>()</pre>
</div>

<div class="methodShort" id="Clone"><h2>复制</h2>
<p>返回对象的一个浅拷贝.</p>
<pre class="Syntax">复制 := aMap.<span class="func">复制</span>()</pre>
<p>所有键-值对都被复制到新映射. 对象 <em>引用</em> 被复制(就像普通的赋值一样), 而不是对象本身.</p>
<p>根据 <a href="Object.htm#Clone">Obj.复制</a> 来复制自有的属性, 方法和基.</p>
</div>

<div class="methodShort" id="Delete"><h2>删除</h2>
<p>从映射中删除键-值对.</p>
<pre class="Syntax">aMap.<span class="func">删除</span>(Key)</pre>
<dl>
  <dt>Key</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a>, <a href="../Objects.htm">对象</a>或<a href="../Concepts.htm#strings">字符串</a></p>
    <p>任意一个键. 如果映射不包含此键, 则抛出异常.</p>
  </dd>
  <dt>返回值</dt>
  <dd><p>删除的值.</p></dd>
</dl>
</div>

<div class="methodShort" id="Has"><h2>包含</h2>
<p>如果 <i>Key</i> 在映射中有关联的值, 则返回 true, 否则返回 false.</p>
<pre class="Syntax">aMap.<span class="func">包含</span>(Key)</pre>
</div>

<div class="methodShort" id="Set"><h2>设置</h2>
<p>设置零个或多个项目.</p>
<pre class="Syntax">aMap.<span class="func">设置</span>(<span class="optional">Key, Value, Key2, Value2, ...</span>)</pre>
<p>这相当于用 <code>aMap[Key] := Value</code> 来设置每个项目, 除了 <a href="#__Item">__Item</a> 没有被调用和 <a href="#Capacity">容量</a> 会被自动调整, 以避免在一次调用中扩展多次.</p>
<p>返回 映射 对象.</p>
</div>

<div class="methodShort" id="__Enum"><h2>__Enum</h2>
<p>枚举键-值对.</p>
<pre class="Syntax">遍历 Key <span class="optional">, Value</span> in aMap</pre>
<p>返回一个新的<a href="Enumerator.htm">枚举器</a>. 该方法通常不直接调用. 而是将映射对象被直接传递给 <a href="../commands/For.htm">遍历-loop</a>, 其调用一次 __Enum 然后循环的每次迭代都调用一次枚举器. 每次对枚举器的调用都会返回下一个键和/或值. 遍历-loop 的变量对应于枚举器的参数, 它们是:</p>
<dl>
  <dt>Key</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a>, <a href="../Objects.htm">对象</a>或<a href="../Concepts.htm#strings">字符串</a></p>
    <p>键.</p>
  </dd>
  <dt>Value</dt>
  <dd>
    <p>值.</p>
  </dd>
</dl>
</div>

<h2 id="Properties">属性</h2>

<div class="methodShort" id="Count"><h2>长度</h2>
<p>检索映射中存在的键-值对的数量.</p>
<pre class="Syntax">长度 := aMap.<span class="func">长度</span></pre>
</div>

<div class="methodShort" id="Capacity"><h2>容量</h2>
<p>检索或设置映射的当前容量.</p>
<pre class="Syntax">aMap.<span class="func">容量</span> := MaxItems</pre>
<pre class="Syntax">MaxItems := aMap.<span class="func">容量</span></pre>
<dl>
	<dt>MaxItems</dt>
	<dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>在必须自动扩展前, 映射可以包含的最大键-值对数量. 如果设置的值小于当前键-值对数量, 则使用设置的值并释放未使用的空间.</p>
  </dd>
</dl>
</div>

<div class="methodShort" id="CaseSense"><h2>区分大小写</h2>
<p>检索或设置映射的大小写敏感性设置.</p>
<pre class="Syntax">aMap.<span class="func">区分大小写</span> := Setting</pre>
<pre class="Syntax">Setting := aMap.<span class="func">区分大小写</span></pre>
<dl>
	<dt>Setting</dt>
	<dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
    <p>以下值之一:</p>
    <p><code>"On"</code>: 键查询区分大小写. 这是默认设置.</p>
    <p><code>"Off"</code>: 字母 A-Z 被视为与其小写字母相同.</p>
    <p><code>"Locale"</code>: 根据当前用户的区域设置规则, 键查询不区分大小写. 例如, 在大多数英语和西欧地区, 不仅将字母 A-Z 视为与其小写字母相同, 而且也将非 ASCII 字母如 &Auml; 和 &Uuml; 视为与其小写字母相同. 根据被比较字符串的性质, <em>Locale</em> 比 <em>Off</em> 慢 1 到 8 倍.</p>
    <p>在赋值时, 也可以使用字符串 <code>"1"</code> 和 <code>"0"</code>.</p>
  </dd>
</dl>
<p>如果 映射 不是空的, 尝试为该属性赋值将导致抛出异常.</p>
</div>

<div class="methodShort" id="__Item"><h2>__Item</h2>
<p>检索或设置键-值对的值.</p>
<pre class="Syntax">Value := aMap[Key]</pre>
<pre class="Syntax">aMap[Key] := Value</pre>
<dl>
  <dt>Key</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a>, <a href="../Objects.htm">对象</a>或<a href="../Concepts.htm#strings">字符串</a></p>
    <p>检索值时, <em>Key</em> 必须是先前与另一个值相关联的唯一值. 如果 <em>Key</em> 在映射中没有关联的值, 则抛出异常.</p>
    <p>当赋值时, <em>Key</em> 可以是与 <em>Value</em> 相关联的任何值; 换句话说, <em>key</em> 用于以后访问 <em>Value</em>. <a href="../Concepts.htm#numbers">浮点数</a>键被自动转换成字符串.</p>
  </dd>
</dl>
<p></p>
<p>如上所示, 属性名 __Item 通常被省略, 但在覆盖属性时使用.</p>
</div>

<h2 id="Functions">函数</h2>
<div class="methodShort" id="Map"><h2>映射</h2>
<p>创建一个 映射 并设置项目.</p>
<pre class="Syntax">aMap := <span class="func">映射</span>(Key1, Value1, Key2, Value2, ...)</pre>
<p>这相当于用 <code>aMap := 映射.new()</code> 创建一个 映射, 设置它的初始 <a href="#Capacity">容量</a>, 然后用 <code>aMap[Key] := Value</code> 设置每个项目. 避免了多次扩展, 但不能保证 容量 的精确性.</p>
</div>

</body>
</html>